<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8">
	<meta name="viewport"
	      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>清除浮动</title>
	<style>
		.container {
			border: 1px solid brown;
			/*height: 1200px;*/
			width: 500px;
			overflow: hidden;
			/*第二种方法

			*/
		}

		.box1 {
			background: #42b983;
			width: 300px;
			height: 300px;
			float: left;
			/*overflow: hidden;*/
		}

		.clearfix:after {
			content: '1111';
			display: block;
			overflow: hidden;
			visibility: hidden;
			clear: both;
		}

		.box2 {
			background: #4d0000;
			width: 400px;
			height: 400px;
			/*float: right;*/
			/*第三种方法
      clear: both;
			*/

		}
	</style>
</head>
<body>
<div class="container  " >
	<div class="box1 clearfix "></div>
	<!--	第一种方法 -->
    <div style="clear:both;"></div>

	<div class="box2"></div>
</div>
</body>
</html>
<script>
	function Cat() {
		this.name = 'cat'
		// return {
		// 	name:1,
		// 	age:19
		// }
	}

	function newInstance(Fn, ...args) {
		let obj = Object.create(Fn.prototype);
		let result = Fn.call(obj, ...args)
		//通过现代浏览器的操作属性的便利性，可以改变一个对象的 [[Prototype]] 属性, 这种行为在每一个JavaScript引擎和浏览器中都是一个非常慢且影响性能的操作，使用这种方式来改变和继承属性是对性能影响非常严重的，
		// 并且性能消耗的时间也不是简单的花费在 obj.__proto__ = ... 语句上, 它还会影响到所有继承来自该 [[Prototype]] 的对象，如果你关心性能，你就不应该在一个对象中修改它的 [[Prototype]]。
		// 相反, 创建一个新的且可以继承 [[Prototype]] 的对象，推荐使用 Object.create()。
    // Object.setPrototypeOf(obj,Fn.prototype)
		// __proto__ 特性已经从 Web 标准中删除，虽然一些浏览器目前仍然支持它，但也许会在未来的某个时间停止支持，请尽量不要使用该特性。
		// obj.__proto__ = Fn.prototype;
		return result instanceof Object ? result : obj;
	}

	let cat = newInstance(Cat)
	console.log(cat)
	// let cat1=new Cat();
	// console.log(cat1)
</script>
